/**
 * v-clipboard 文字复制剪贴
 * Copyright (c) 2021 ruoyi
 */

import Clipboard from 'clipboard';
export default {
	bind(el, binding, vnode) {
		switch (binding.arg) {
			case 'success':
				el._vClipBoard_success = binding.value;
				break;
			case 'error':
				el._vClipBoard_error = binding.value;
				break;
			default: {
				const clipboard = new Clipboard(el, {
					text: () => binding.value,
					action: () => (binding.arg === 'cut' ? 'cut' : 'copy'),
				});
				clipboard.on('success', (e) => {
					const callback = el._vClipBoard_success;
					callback && callback(e);
				});
				clipboard.on('error', (e) => {
					const callback = el._vClipBoard_error;
					callback && callback(e);
				});
				el._vClipBoard = clipboard;
			}
		}
	},
	update(el, binding) {
		if (binding.arg === 'success') {
			el._vClipBoard_success = binding.value;
		} else if (binding.arg === 'error') {
			el._vClipBoard_error = binding.value;
		} else {
			el._vClipBoard.text = function () {
				return binding.value;
			};
			el._vClipBoard.action = () => (binding.arg === 'cut' ? 'cut' : 'copy');
		}
	},
	unbind(el, binding) {
		if (!el._vClipboard) return;
		if (binding.arg === 'success') {
			delete el._vClipBoard_success;
		} else if (binding.arg === 'error') {
			delete el._vClipBoard_error;
		} else {
			el._vClipBoard.destroy();
			delete el._vClipBoard;
		}
	},
};
